﻿package mortal.game.resource
{
    import Message.DB.Tables.*;
    import Message.Public.*;
    import com.gengine.debug.*;
    import com.gengine.resource.*;
    import flash.system.*;
    import flash.utils.*;
    import mortal.game.resource.info.item.*;
    import mortal.game.view.common.*;

    public class ItemConfig extends Object
    {
        private var map:Dictionary;
        private var _itemGiftSetDic:Dictionary;
        private var _equipDic:Dictionary;
        private var _suitDic:Dictionary;
        private var _fashionEquipDic:Dictionary;
        private var _mountEquipDic:Dictionary;
        private var _wizardEquipDic:Dictionary;
        private static var _instance:ItemConfig;

        public function ItemConfig()
        {
            this.map = new Dictionary();
            this._itemGiftSetDic = new Dictionary();
            this._equipDic = new Dictionary();
            this._suitDic = new Dictionary();
            this._fashionEquipDic = new Dictionary();
            this._mountEquipDic = new Dictionary();
            this._wizardEquipDic = new Dictionary();
            this.init();
            return;
        }// end function

        protected function init() : void
        {
            var _loc_1:* = getTimer();
            var _loc_2:* = System.totalMemory;
            var _loc_3:* = ConfigManager.instance.getJSONByFileName("t_item.json");
            this.write(_loc_3);
            Log.system("解析t_item耗时:", getTimer() - _loc_1);
            Log.system("解析t_item内存增加:", System.totalMemory, System.totalMemory - _loc_2);
            _loc_3 = ConfigManager.instance.getJSONByFileName("t_item_equip.json");
            this.writeWeapon(_loc_3);
            Log.system("解析t_item_equip耗时:", getTimer() - _loc_1);
            _loc_3 = ConfigManager.instance.getJSONByFileName("t_item_gift_bag.json");
            this.writeGiftBag(_loc_3);
            Log.system("解析t_item_gift_bag耗时:", getTimer() - _loc_1);
            _loc_3 = ConfigManager.instance.getJSONByFileName("t_item_mount.json");
            this.writeMount(_loc_3);
            Log.system("解析t_item_mount耗时:", getTimer() - _loc_1);
            _loc_3 = ConfigManager.instance.getJSONByFileName("t_suit.json");
            this.writeSuit(_loc_3);
            return;
        }// end function

        protected function writeSuit(param1:Object) : void
        {
            var _loc_2:TSuit = null;
            var _loc_3:Object = null;
            for each (_loc_3 in param1)
            {
                
                _loc_2 = new TSuit();
                ClassTypesUtil.copyValue(_loc_2, _loc_3);
                this._suitDic[_loc_2.id] = _loc_2;
            }
            return;
        }// end function

        protected function write(param1:Object) : void
        {
            var _loc_2:ItemInfo = null;
            var _loc_4:Object = null;
            var _loc_3:int = 0;
            for each (_loc_4 in param1)
            {
                
                _loc_2 = new ItemInfo();
                ClassTypesUtil.copyValue(_loc_2, _loc_4);
                this.map[_loc_2.code] = _loc_2;
            }
            return;
        }// end function

        protected function writeWeapon(param1:Object) : void
        {
            var _loc_2:ItemEquipInfo = null;
            var _loc_3:Object = null;
            for each (_loc_3 in param1)
            {
                
                _loc_2 = new ItemEquipInfo();
                ClassTypesUtil.copyValue(_loc_2, _loc_3);
                this.map[_loc_2.code] = _loc_2;
                this._equipDic[_loc_2.code] = _loc_2;
                if (_loc_2.category == EProp._EPropFashionClothesEquip || _loc_2.category == EProp._EPropFashionWingEquip || _loc_2.category == EProp._EPropFashionWeaponEquip || _loc_2.category == EProp._EPropFashionFightSoulEquip || _loc_2.category == EProp._EPropFashionFightMethodEquip || _loc_2.category == EProp._EPropFashionDragonSoulEquip || _loc_2.category == EProp._EPropFashionHolyBookEquip || _loc_2.category == EProp._EPropFashionWarShieldEquip || _loc_2.category == EProp._EPropFashionMonsterSoulEquip)
                {
                    this._fashionEquipDic[_loc_2.code] = _loc_2;
                }
                if (_loc_2.category == EProp._EPropMountEquip || _loc_2.category == EProp._EPropPet2Equip)
                {
                    this._mountEquipDic[_loc_2.code] = _loc_2;
                }
                if (_loc_2.category == EProp._EPropSpriteEquip)
                {
                    this._wizardEquipDic[_loc_2.code] = _loc_2;
                }
            }
            return;
        }// end function

        protected function writeGiftBag(param1:Object) : void
        {
            var _loc_2:ItemGiftBagInfo = null;
            var _loc_3:Object = null;
            for each (_loc_3 in param1)
            {
                
                _loc_2 = new ItemGiftBagInfo();
                ClassTypesUtil.copyValue(_loc_2, _loc_3);
                this.map[_loc_2.code] = _loc_2;
                if (_loc_2.set > 0)
                {
                    if (this._itemGiftSetDic[_loc_2.set] == null)
                    {
                        this._itemGiftSetDic[_loc_2.set] = new Array();
                    }
                    (this._itemGiftSetDic[_loc_2.set] as Array).push(_loc_2);
                }
            }
            return;
        }// end function

        protected function writeMount(param1:Object) : void
        {
            var _loc_2:ItemMountInfo = null;
            var _loc_3:Object = null;
            for each (_loc_3 in param1)
            {
                
                _loc_2 = new ItemMountInfo();
                ClassTypesUtil.copyValue(_loc_2, _loc_3);
                this.map[_loc_2.code] = _loc_2;
            }
            return;
        }// end function

        public function get itemGiftSetDic() : Dictionary
        {
            return this._itemGiftSetDic;
        }// end function

        public function getConfig(param1:int) : ItemInfo
        {
            return this.map[param1];
        }// end function

        public function getAllEquipBySuitGroup(param1:int) : Array
        {
            var _loc_3:ItemEquipInfo = null;
            var _loc_2:Array = [];
            for each (_loc_3 in this._equipDic)
            {
                
                if (_loc_3.suitGroup == param1)
                {
                    _loc_2.push(_loc_3);
                }
            }
            return _loc_2;
        }// end function

        public function getAllEquipBy(param1:int, param2:int, param3:int, param4:int) : Array
        {
            var _loc_6:ItemEquipInfo = null;
            var _loc_5:Array = [];
            for each (_loc_6 in this._equipDic)
            {
                
                if (_loc_6.suitId == param1 && param2 == _loc_6.level && param3 == _loc_6.color && _loc_6.career == param4)
                {
                    _loc_5.push(_loc_6);
                }
            }
            return _loc_5;
        }// end function

        public function getEquipBySuitGroup(param1:int) : ItemEquipInfo
        {
            var _loc_2:ItemEquipInfo = null;
            var _loc_3:ItemEquipInfo = null;
            for each (_loc_3 in this._equipDic)
            {
                
                if (_loc_3.suitGroup == param1)
                {
                    _loc_2 = _loc_3;
                    break;
                }
            }
            return _loc_2;
        }// end function

        public function getAllMap() : Dictionary
        {
            return this.map;
        }// end function

        public function getAllEquip() : Dictionary
        {
            return this._equipDic;
        }// end function

        public function getAllFashion() : Dictionary
        {
            return this._fashionEquipDic;
        }// end function

        public function getItemByName(param1:String) : ItemInfo
        {
            var _loc_2:ItemInfo = null;
            var _loc_3:ItemInfo = null;
            for each (_loc_3 in this.map)
            {
                
                if (_loc_3.name == param1)
                {
                    _loc_2 = _loc_3;
                    break;
                }
            }
            return _loc_2;
        }// end function

        public function getItemColorByCode(param1:int) : int
        {
            var _loc_2:ItemInfo = null;
            for each (_loc_2 in this.map)
            {
                
                if (_loc_2.code == param1)
                {
                    return _loc_2.color;
                }
            }
            return 0;
        }// end function

        public function getItemByCategoryAndtype(param1:int, param2:int) : Array
        {
            var _loc_4:ItemInfo = null;
            var _loc_3:Array = [];
            for each (_loc_4 in this.map)
            {
                
                if (_loc_4.category == param1 && _loc_4.type == param2)
                {
                    _loc_3.push(_loc_4);
                }
            }
            return _loc_3;
        }// end function

        public function getSuitsBytype(param1:int) : Array
        {
            var _loc_3:TSuit = null;
            var _loc_2:Array = [];
            for each (_loc_3 in this._suitDic)
            {
                
                if (_loc_3.suitType == param1)
                {
                    _loc_2.push(_loc_3);
                }
            }
            return _loc_2;
        }// end function

        public function getSuitById(param1:int) : TSuit
        {
            return this._suitDic[param1] as TSuit;
        }// end function

        public function getFashionBySuitIdAndType(param1:int, param2:int, param3:int = 0) : ItemEquipInfo
        {
            var _loc_4:ItemEquipInfo = null;
            for each (_loc_4 in this._fashionEquipDic)
            {
                
                if (_loc_4.suitId == param1 && _loc_4.type == param2 && _loc_4.career == param3)
                {
                    return _loc_4;
                }
            }
            return null;
        }// end function

        public function get petTotemPackMax() : int
        {
            var _loc_1:int = 0;
            var _loc_2:ItemInfo = null;
            for each (_loc_2 in this.map)
            {
                
                if (_loc_2.category == EProp._EPropPetTotem && _loc_2.group == EGroup._EGroupDrop && (_loc_2.type == EPropPetTotemType._EPropPetTotemPropEquip || _loc_2.type == EPropPetTotemType._EPropPetTotemPropScroll || _loc_2.type == EPropPetTotemType._EPropPetTotemPropPiece))
                {
                    _loc_1++;
                }
            }
            return _loc_1;
        }// end function

        public function getItemInfoByCondition(param1:int, param2:int, param3:int, param4:int = -1, param5:int = -1, param6:int = -1, param7:int = -1) : ItemInfo
        {
            var _loc_8:ItemInfo = null;
            for each (_loc_8 in this.map)
            {
                
                if (_loc_8.group == param1 && _loc_8.category == param2 && _loc_8.type == param3 && (param4 == -1 || _loc_8.itemLevel == param4) && (param5 == -1 || _loc_8.color == param5) && (param6 == -1 || _loc_8.bind == param6) && (param7 == -1 || _loc_8.effect == param7))
                {
                    return _loc_8;
                }
            }
            return null;
        }// end function

        public function getFashionEquipByLevel(param1:int, param2:int, param3:int, param4:int) : ItemEquipInfo
        {
            var _loc_5:ItemEquipInfo = null;
            for each (_loc_5 in this._fashionEquipDic)
            {
                
                if (_loc_5.category == param1 && _loc_5.type == param2 && _loc_5.level == param3 && _loc_5.itemLevel == param4)
                {
                    return _loc_5;
                }
            }
            return null;
        }// end function

        public function getMountEquipByLevel(param1:int, param2:int, param3:int, param4:int) : ItemEquipInfo
        {
            var _loc_5:ItemEquipInfo = null;
            for each (_loc_5 in this._mountEquipDic)
            {
                
                if (_loc_5.category == param1 && _loc_5.type == param2 && _loc_5.level == param3 && _loc_5.itemLevel == param4)
                {
                    return _loc_5;
                }
            }
            return null;
        }// end function

        public function getWizardEquipByLevel(param1:int, param2:int, param3:int, param4:int) : ItemEquipInfo
        {
            var _loc_5:ItemEquipInfo = null;
            for each (_loc_5 in this._wizardEquipDic)
            {
                
                if (_loc_5.category == param1 && _loc_5.type == param2 && _loc_5.level == param3 && _loc_5.itemLevel == param4)
                {
                    return _loc_5;
                }
            }
            return null;
        }// end function

        public static function get instance() : ItemConfig
        {
            if (_instance == null)
            {
                _instance = new ItemConfig;
            }
            return _instance;
        }// end function

    }
}
